﻿using MySql.Data.MySqlClient;
using ServicioTecnico.Datos.Interfaces;
using ServicioTecnico.Entidad;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Dapper;
using DapperExtensions;

namespace ServicioTecnico.Datos.Repositories
{
    public interface IClienteRepository : IRepository<Cliente>
    {

    }

    public class ClienteRepository : IClienteRepository
    {
        protected readonly IDbConnection _db;
        public ClienteRepository()
        {
            _db = new MySqlConnection(ConfigurationManager.ConnectionStrings["SERVICIO"].ToString()); 
        }

        public IList<Cliente> FindAll()
        {
            using (IDbConnection _db = new MySqlConnection(ConfigurationManager.ConnectionStrings["SERVICIO"].ToString()))
            {
                return _db.Query<Cliente>("SELECT * FROM clientes").ToList();
            }
        }

        public IQueryable<Cliente> Find(System.Linq.Expressions.Expression<Func<Cliente, bool>> predicate)
        {
            throw new NotImplementedException();
        }

        public Cliente FindById(int id)
        {
            string query = "SELECT * FROM CLIENTES WHERE ID = " + id;

            using (IDbConnection _db = new MySqlConnection(ConfigurationManager.ConnectionStrings["SERVICIO"].ToString()))
            {
                return _db.Query<Cliente>(query).SingleOrDefault();
            }
        }

        public int Add(Cliente newEntity)
        {
            string query = "INSERT INTO CLIENTES (NOMBRES, APELLIDO, DOCUMENTO, FECHANACIMIENTO, RAZONSOCIAL, CUIT, DIRECCION, LOCALIDAD, CP, TELEFONO, CELULAR, EMAIL, ACTIVO) " +
                            "VALUES(@nombres, @apellido, @documento, @fechanacimiento, @razonsocial, @cuit, @direccion, @localidad, @cp, @telefono, @celular, @email, @activo)";


            using (IDbConnection _db = new MySqlConnection(ConfigurationManager.ConnectionStrings["SERVICIO"].ToString()))
            {
                return _db.Execute(query, new 
                { 
                    id =  newEntity.id,
                    nombres = newEntity.nombres,
                    apellido = newEntity.apellido,
                    documento = newEntity.documento,
                    fechanacimiento = newEntity.fechanacimiento,
                    razonsocial = newEntity.razonsocial,
                    direccion = newEntity.direccion,
                    localidad = newEntity.localidad,
                    cp = newEntity.cp,
                    telefono = newEntity.telefono,
                    celular = newEntity.celular,
                    email = newEntity.email,
                    activo = newEntity.activo,
                    cuit = newEntity.cuit
                });
            }
        }

        public bool Remove(int id)
        {
            throw new NotImplementedException();
        }

        public int Modify(Cliente entity)
        {
            throw new NotImplementedException();
        }
    }
}
